package view;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import model.Advertentie;
import model.CiiBay;
import model.Gebruiker;


/**
 * Paneel waarop Feedback gegevens kunnen worden ingevuld.
 * @author Dennis
 */
@SuppressWarnings("serial")
public class FeedbackPaneel extends JPanel {

	private JPanel totaal;
	private JLabel titel, feedBack, kwaliteit, snelheid, totaalText, totaalCijferText, betaling, bestelling, nummer1, nummer2;
	private JTextArea feedBackVeld;
	private JComboBox cijfer1, cijfer2;
	private JButton okKnop, reset;
	private JScrollPane scroll;
	private ArrayList<String> cijfers;
	private Advertentie ad;
	private CiiBay ciiBay;
	private double cijfer;

	/**
	 * Constructor. Maakt de invoervelden en labels aan en plaatst ze in een GridBagLayout.
	 * @author Yasper
	 * @author Nick
	 * @author Dennis
	 * */
	public FeedbackPaneel(Advertentie ad, CiiBay ciibay){
		this.ad = ad;
		this.ciiBay = ciibay;
		totaal = new JPanel(new GridLayout(3,1));
		nummer1 = new JLabel();
		nummer2 = new JLabel();
		if(ciiBay.getIngelogtPersoon().getNaam().equals(ad.getKoper().getNaam())) {
			titel = new JLabel("Feedback geven op:  " + ad.getVerkoper().getNaam());
		} else if(ciiBay.getIngelogtPersoon().getNaam().equals(ad.getVerkoper().getNaam())) {
			titel = new JLabel("Feedback geven op:  " + ad.getKoper().getNaam());
		}

		titel.setFont(new Font("Serif", Font.BOLD, 25));

		//labels voor koper->verkoper
		snelheid = new JLabel("Snelheid van verzenden:   ");
		kwaliteit = new JLabel("Kwaliteit van verzonden product:   ");

		//labels voor verkoper->koper
		betaling = new JLabel("Afhandeling betaling:   ");
		bestelling = new JLabel("Afhandeling bestelling:   ");

		//Beide
		feedBack = new JLabel("Verdere op/aanmerkingen:   ");

		totaalText = new JLabel("Totaal cijfer:	");
		totaalText.setFont(new Font("Serif", Font.BOLD, 20));
		totaalCijferText = new JLabel("1", JLabel.CENTER);
		totaalCijferText.setFont(new Font("Serif", Font.BOLD, 20));

		feedBackVeld = new JTextArea(50,20);
		feedBackVeld.setMaximumSize(new Dimension(100,40));
		feedBackVeld.setDocument(new MaxAantalKarakters(250));
		scroll = new JScrollPane(feedBackVeld);

		cijfers = new ArrayList<String>();
		cijfers.add("1");
		cijfers.add("2");
		cijfers.add("3");
		cijfers.add("4");
		cijfers.add("5");
		cijfer1 = new JComboBox(cijfers.toArray());
		cijfer2 = new JComboBox(cijfers.toArray());
		cijfer1.addActionListener(new refreshKnop());
		cijfer2.addActionListener(new refreshKnop());
		okKnop = new JButton("OK");
		reset = new JButton("Reset");
		reset.addActionListener(new resetButton());
		okKnop.addActionListener(new submitButton());

		setLayout(new GridBagLayout());
		maakView();
	}

	/**
	 * @author Yasper
	 * @author Nick
	 * @author Dennis
	 * Deze methode maakt alle invoervelden aan dit staat apart om alles mooi duidelijk te houden.
	 */
	public void maakView(){
		int y;
		y = 0;
		GridBagConstraints c = new GridBagConstraints();
		JPanel bovenste = new JPanel(new GridBagLayout());
		JPanel onderste = new JPanel(new GridBagLayout());
		c.fill = GridBagConstraints.HORIZONTAL;
		c.gridx = 0;
		c.gridy = y;
		bovenste.add(titel,c);
		y++;
		c.gridx = 0;
		c.gridy = y;
		if(ciiBay.getIngelogtPersoon().getNaam().equals(ad.getKoper().getNaam())) {
			nummer1 = snelheid;
			nummer2 = kwaliteit;
		} else if(ciiBay.getIngelogtPersoon().getNaam().equals(ad.getVerkoper().getNaam())) {
			nummer1 = betaling;
		}
		bovenste.add(nummer1,c);
		c.ipadx = 100;
		c.gridx=1;
		c.gridy=y;
		bovenste.add(cijfer1, c);
		totaal.add(bovenste);
		y++;
		c.gridx = 0;
		c.gridy = y;
		if(ciiBay.getIngelogtPersoon().getNaam().equals(ad.getKoper().getNaam())) {
			bovenste.add(nummer2,c);
			c.gridx = 1;
			c.gridy = y;
			bovenste.add(cijfer2,c);
			y++;
			c.gridx = 0;
			c.gridy = y;
		}
		bovenste.add(feedBack,c);

		totaal.add(scroll);


		JPanel totaalCijfer = new JPanel();
		totaalCijfer.setBackground(Color.ORANGE);
		GridBagConstraints d = new GridBagConstraints();
		totaalCijfer.setLayout(new GridLayout(1,2));
		d.fill = GridBagConstraints.HORIZONTAL;
		d.gridx = 1;
		d.gridy = 0;
		totaalCijfer.add(totaalText,d);
		d.gridx = 1;
		d.gridy = 1;
		totaalCijfer.add(totaalCijferText, d);
		d.gridx = 0;
		d.gridy = 0;
		onderste.add(totaalCijfer,d);
		JPanel knoppen = new JPanel();
		knoppen.setLayout(new GridLayout(1,2));
		knoppen.add(reset);
		knoppen.add(okKnop);
		knoppen.setBackground(Color.ORANGE);
		d.gridx = 0;
		d.gridy = 1;
		onderste.add(knoppen,d);
		totaal.add(onderste);


		this.setBackground(Color.ORANGE);
		totaal.setBackground(Color.ORANGE);
		bovenste.setBackground(Color.ORANGE);
		onderste.setBackground(Color.ORANGE);
		add(totaal);
	}

	private void resetVelden() {
		cijfer1.setSelectedIndex(0);
		cijfer2.setSelectedIndex(0);
		feedBackVeld.setText("");		
	}

	class submitButton implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent arg0) {
			String melding = null;
			String feedBackText = feedBackVeld.getText();
			if(ciiBay.getIngelogtPersoon().getNaam().equals(ad.getKoper().getNaam())) {
				ad.getVerkoper().setRepHoeveelheid(Integer.parseInt(cijfer1.getSelectedItem().toString()));
				ad.getVerkoper().setRepHoeveelheid(Integer.parseInt(cijfer2.getSelectedItem().toString()));
				ad.getVerkoper().setAantalStemmen(2);
				melding = ciiBay.feedbackToevoegen(ad, (Gebruiker)ciiBay.getIngelogtPersoon(), ad.getVerkoper(), feedBackText);
			} else if(ciiBay.getIngelogtPersoon().getNaam().equals(ad.getVerkoper().getNaam())) {
				ad.getKoper().setRepHoeveelheid(Integer.parseInt(cijfer1.getSelectedItem().toString()));
				ad.getKoper().setAantalStemmen(1);
				melding = ciiBay.feedbackToevoegen(ad, (Gebruiker)ciiBay.getIngelogtPersoon(), ad.getKoper(), feedBackText);
			}
			JOptionPane.showMessageDialog(null, melding, "Feedback", JOptionPane.INFORMATION_MESSAGE);
			ciiBay.veranderView("welkom");
		}

	}
	/**
	 * Reset alle velden door de methode resetVelden() aan te roepen
	 * @author Dennis
	 *
	 */
	class resetButton implements ActionListener{
		public void actionPerformed(ActionEvent e){
			resetVelden();
		}
	}

	/**
	 * veranderd het gemiddelde cijfer als er weer een getal wordt veranderd.
	 * @author Dennis
	 */
	class refreshKnop implements ActionListener{
		public void actionPerformed(ActionEvent e){
			if(ciiBay.getIngelogtPersoon().getNaam().equals(ad.getKoper().getNaam())) {
				int eerste = Integer.parseInt(cijfer1.getSelectedItem().toString());
				int tweede = Integer.parseInt(cijfer2.getSelectedItem().toString());
				cijfer = (eerste+tweede)/2.0;
			} else {
				int eerste = Integer.parseInt(cijfer1.getSelectedItem().toString());
				cijfer = eerste;
			}
			totaalCijferText.setText(""+cijfer);
		}
	}
}